package cn.it.shop.action;

import java.util.HashSet;
import java.util.Set;

import org.springframework.context.annotation.Scope;
import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;
import org.springframework.stereotype.Controller;

import cn.it.shop.pojo.Privilege;
import cn.it.shop.pojo.Role;

@Controller
@Scope("prototype")
public class RoleAction extends BaseAction<Role> {
	
	private int[] ids;
	
	public int[] getIds() {
		return ids;
	}

	public void setIds(int[] ids) {
		this.ids = ids;
	}

	// 新增角色
	public String save(){
		roleService.save(model);
		return "query";
	}
	
	// 查询所有角色
	public String query(){
		request.put("roleList", roleService.query());
		return "query";
	}
	
	// 更新某个角色信息
	public String getById(){		
		request.put("role",roleService.get(model.getId()));
		return "update";
	}
	
	// 更新角色的权限信息
	public String getFetchPid(){
		// 1: 更新id查询当前的角色(还包括角色的权限信息),后面要实现信息回显
		Role role = roleService.getFetchPid(model.getId());
		// 2: 获取权限集合中的URL字符串，并且存储到字符串数组中
		String[] myUrl=privilegeService.getPrivilegeURL(role.getPrivilegeSet());
		request.put("myUrl",myUrl);
		// 3: 获取所有的权限集合(目前不支持级联),由于权限数据是不变,所有可以放到application中
		request.put("role",role);
		return "updatePid";
	}
	
	// 级联更新权限ID
	public String updatePid(){
		// 查询当前角色信息
		model=roleService.get(model.getId());
		Set<Privilege> privilegeSet=new HashSet<Privilege>();
		//1: 角色信息已经交给model
		//2: 获取角色新的权限信息,然后做级联更新
		for(int id:ids){
			System.out.println(id);
			privilegeSet.add(new Privilege(id));
		}
		// 如果有权限,则添加相应权限集合
		model.setPrivilegeSet(privilegeSet);
		// 级联更新外键信息
		roleService.update(model);
		// 同步privilegeRoleMap中的资源与角色的相关信息
		securityMetadataSource.getAllConfigAttributes();
		System.out.println("=====");
		return "query";
	}
	
	// 更新角色信息
	public String update(){
		// 不会级联更新外键
		roleService.updateOnlyRole(model);
		return "query";
	}
	
	// 删除指定角色信息
	public String delete(){
		roleService.delete(model.getId());
		request.put("roleList", roleService.query());
		return "query";
	}
}
